package cn.hinglo.common.config.error;

import cn.hinglo.common.enums.ResponseEnum;
import com.jfinal.core.Controller;

/***
 * 全局错误异常返回
 * @author HingLo
 * @date 2019-06-14
 */
public class SelfErrorRender {


    /***
     * 具体错误信息返回处理,全局异常使用Json 数据返回。（具体页面处理可以通过前端控制显示）
     * @param errorCode 错误码
     * @param errorMsg  错误提示消息
     * @param controller controller
     * @param object 返回的具体内容对象
     * @param e 具体错误信息
     */
    public static void errorRender(Integer errorCode, String errorMsg, Controller controller, Object object, Exception e) {
        if (e != null) {
            e.printStackTrace();
        }
        //
        controller.renderJson(ErrorConstant.errorJson(errorCode, errorMsg, object));
    }

    /***
     *
     * @param errorCode 错误码
     * @param errorMsg 错误消息
     * @param controller controller
     * @param e 异常信息
     */
    public static void errorRender(Integer errorCode, String errorMsg, Controller controller, Exception e) {
        errorRender(errorCode, errorMsg, controller, null, e);
    }

    /***
     * 无内容错误响应对象对象
     * @param responseEnum 响应信息
     * @param controller controller
     * @param e 错误对象
     */
    public static void errorRender(ResponseEnum responseEnum, Controller controller, Exception e) {
        errorRender(responseEnum.getCode(), responseEnum.getMessage(), controller, null, e);
    }

    /***
     * 自定自定义响应码错误响应对象
     * @param errorCode 错误码
     * @param controller controller
     */
    public static void errorRender(Integer errorCode, Controller controller) {
        errorRender(errorCode, null, controller, null, null);
    }

    /***
     * 无对象无异常的响应对象
     * @param responseEnum 枚举错误类型
     * @param controller controller
     */
    public static void errorRender(ResponseEnum responseEnum, Controller controller) {
        errorRender(responseEnum, controller, null);
    }

    /****
     *  带有响应对象的错误信息
     * @param errorCode errorCode
     * @param controller controller
     * @param object 响应对象
     * @param <T> 泛型
     */
    public static <T> void errorRender(Integer errorCode, Controller controller, T object) {
        errorRender(errorCode, null, controller, object, null);
    }
}
